﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Turnero.DAOs;

namespace Turnero.Turnos
{
    public partial class AltaTurno : Form
    {
        Turnero.Principal principal = new Turnero.Principal();
        Int32 idPaciente;
        Int32 idPrestador;
        String diaTurno, minutosDesdeTurno, minutoHastaTurno;
        Int32 horaDesdeTurno, horaHastaTurno;

        public AltaTurno()
        {
            InitializeComponent();
        }

        public AltaTurno(Turnero.Principal princ, String dia, String horaDesde, String minutoDesde, Int32 idPre, String horaHasta, String minutoHasta)
        {
            InitializeComponent();
            principal = princ;
            cargarCombo(cbxLocalidad);
            cbxLocalidad.Text = "Alta Gracia";
            cbxTipoDoc.SelectedIndex = 0;
            idPaciente = 0;
            txtNroDoc.Focus();
            idPrestador = idPre;
            horaDesdeTurno = Convert.ToInt32(horaDesde);
            horaHastaTurno = Convert.ToInt32(horaHasta);
            diaTurno = dia;
            minutosDesdeTurno = minutoDesde;
            minutoHastaTurno = minutoHasta;

            txtFechaTurno.Text = diaTurno;
            txtHoraTurno.Text = horaDesdeTurno + ":" + minutosDesdeTurno;

            DAO_Profesionales dp = new DAO_Profesionales();
            Turnero.Entidades.Profesional pr = new Turnero.Entidades.Profesional();
            pr = dp.dameProfesionalPorID(idPrestador);
            txtProfesional.Text = pr.Ape + ", " + pr.Nom;
        }

        private void AltaTurno_Load(object sender, EventArgs e)
        {
            
            txtNroDoc.Focus();

        }

        private void txtNroDoc_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
        {

        }

        private void txtNroDoc_Leave(object sender, EventArgs e)
        {
            if (txtNroDoc.Text.Equals("") == false && cbxTipoDoc.SelectedIndex != (-1))
            {
                DataTable paciente = new DataTable();

                DAO_Pacientes dp = new DAO_Pacientes();

                paciente = dp.damePacientesPorTipoYNroDocExacto(cbxTipoDoc.SelectedItem.ToString(), txtNroDoc.Text);

                if (paciente.Rows.Count > 0)
                {
                    Turnero.Entidades.Paciente pac = new Turnero.Entidades.Paciente();
                    pac.Cod = paciente.Rows[0][0].ToString();
                    pac.Ape = paciente.Rows[0][3].ToString();
                    pac.Nom = paciente.Rows[0][4].ToString();
                    pac.Tipodoc = paciente.Rows[0][1].ToString();
                    pac.Nrodoc = paciente.Rows[0][2].ToString();
                    pac.Domicilio = paciente.Rows[0][7].ToString();
                    pac.Localidad = paciente.Rows[0][8].ToString();
                    pac.Sexo = paciente.Rows[0][9].ToString();
                    pac.Fechanac = paciente.Rows[0][5].ToString();
                    pac.Tel = paciente.Rows[0][10].ToString();
                    pac.Cel = paciente.Rows[0][11].ToString();
                    pac.Email = paciente.Rows[0][12].ToString();
                    pac.Obs = paciente.Rows[0][13].ToString();
                    idPaciente = Convert.ToInt32(pac.Cod);

                    txtApellidos.Text = pac.Ape;
                    txtNombres.Text = pac.Nom;

                    txtDomicilio.Text = pac.Domicilio;
                    cbxLocalidad.Text = pac.Localidad;
                    txtTelefono.Text = pac.Tel;
                    txtCelular.Text = pac.Cel;
                    txtEmail.Text = pac.Email;
                    cbxSexo.Text = pac.Sexo;
                    dtpFechaNac.Text = pac.Fechanac;

                }
                else
                {
                    idPaciente = 0;
                    limpiarCamposSinDni();
                }
            }
        }

        private void limpiarCamposSinDni()
        {
            txtApellidos.Text = "";
            txtNombres.Text = "";
            dtpFechaNac.Value = System.DateTime.Now;
            cbxSexo.SelectedIndex = 0;
            txtDomicilio.Text = "";
            cbxLocalidad.Text = "Alta Gracia";
            txtTelefono.Text = "";
            txtCelular.Text = "";
            txtEmail.Text = "";
            txtObraSocial.Text = "";
            txtObservaciones.Text = "";

        }

        private void limpiarCampos()
        {
            cbxTipoDoc.SelectedIndex = 0;
            txtNroDoc.Text = "";
            txtApellidos.Text = "";
            txtNombres.Text = "";
            dtpFechaNac.Value = System.DateTime.Now;
            cbxSexo.SelectedIndex = 0;
            txtDomicilio.Text = "";
            cbxLocalidad.Text = "Alta Gracia";
            txtTelefono.Text = "";
            txtCelular.Text = "";
            txtEmail.Text = "";
            txtObraSocial.Text = "";
            txtObservaciones.Text = "";

        }

        private void AltaTurno_Leave(object sender, EventArgs e)
        {
          
        }

        private void AltaTurno_FormClosing(object sender, FormClosingEventArgs e)
        {
            
            principal.cargarTurnos();
            principal.setearVista();
        }

        private void cargarCombo(ComboBox cmb)
        {
          
            
            if (cmb == cbxLocalidad)
            {
                DAO_Localidades dl = new DAO_Localidades();
                cmb.DataSource = dl.DameLocalidades();
                cmb.DisplayMember = "nombre";
                cmb.ValueMember = "idLocalidad";
            }
        }

        private void txtApellidos_TextChanged(object sender, EventArgs e)
        {

        }

        private void txtDomicilio_TextChanged(object sender, EventArgs e)
        {

        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea registrar el turno?", "Confirmacion registro", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                bool resultadoGuardarActualizar;
                bool resultadoValidacion = validarDatos();

                if (resultadoValidacion == true)
                {
                    string ape, nom, tipodoc, nrodoc, sexo, dom, tel, cel, email, cuitcuil, obs;
                    Int32 loc;
                    DateTime fechanac;

                    ape = txtApellidos.Text.ToUpper().Trim();
                    nom = txtNombres.Text.ToUpper().Trim();
                    tipodoc = cbxTipoDoc.SelectedItem.ToString().Trim();
                    nrodoc = txtNroDoc.Text.Trim();
                    fechanac = Convert.ToDateTime(dtpFechaNac.Value.Date.ToString("yyyy-MM-dd"));
                    sexo = cbxSexo.SelectedItem.ToString().Trim();
                    dom = txtDomicilio.Text.ToUpper().Trim();
                    loc = Convert.ToInt32(cbxLocalidad.SelectedValue);
                    tel = txtTelefono.Text.Trim();
                    cel = txtCelular.Text.Trim();
                    email = txtEmail.Text.Trim();


                    if (idPaciente == 0)
                    {
                        DAO_Pacientes dp = new DAO_Pacientes();
                        resultadoGuardarActualizar = dp.guardarPaciente(ape, nom, tipodoc, nrodoc, fechanac, sexo, dom, loc, tel, cel, email, "");
                        idPaciente = Convert.ToInt32(dp.dameMaxID());
                    }
                    else
                    {
                        DAO_Pacientes dp = new DAO_Pacientes();
                        resultadoGuardarActualizar = dp.actualizarPaciente(idPaciente.ToString(), ape, nom, tipodoc, nrodoc, fechanac, sexo, dom, loc, tel, cel, email, "");
                    }

                    if (resultadoGuardarActualizar == false)
                    {
                        MessageBox.Show("No se pudo actualizar los datos del paciente. No se puede continuar con el registro del turno", "Error al registrar Paciente");
                    }
                    else
                    {
                        bool resultadoGuardarTurno;
                        String obraSocial = txtObraSocial.Text.Trim();
                        String observaciones = txtObservaciones.Text.Trim();
                        DateTime diaTurnoFecha = Convert.ToDateTime(diaTurno);
                        Turnero.Entidades.Turno turno = new Turnero.Entidades.Turno(0, diaTurnoFecha, horaDesdeTurno, horaHastaTurno, minutosDesdeTurno, minutoHastaTurno, nrodoc, ape, nom, tipodoc, fechanac, sexo, dom, loc, tel, cel, email, obraSocial, observaciones, idPaciente, idPrestador);
                        TurnosBD tbd = new TurnosBD();
                        
                        resultadoGuardarTurno = tbd.guardarTurno(turno);

                        if (resultadoGuardarTurno == true)
                        {
                            MessageBox.Show("El turno se ha registrado con éxito");
                            
                                this.Close();
                        }
                        else
                        {
                            MessageBox.Show("El turno no ha sido registrado");
                           
                            this.Close();
                        }
                    }
                }
            }
        }

        private bool validarDatos()
        {
            if (txtNroDoc.Text.Trim() == "")
            {
                MessageBox.Show("Debe Ingresar un número de dni");
                txtNroDoc.Focus();
                return false;
            }

            if (txtApellidos.Text.Trim() == "")
            {
                MessageBox.Show("Debe Ingresar un Apellido");
                txtApellidos.Focus();
                return false;
            }

            if (txtNombres.Text.Trim() == "")
            {
                MessageBox.Show("Debe Ingresar un Nombre");
                txtNombres.Focus();
                return false;
            }

            if (dtpFechaNac.Value > System.DateTime.Now)
            {
                MessageBox.Show("La fecha de Nacimiento no puede ser mayor a la fecha actual");
                dtpFechaNac.Focus();
                return false;
            }
            return true;
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            limpiarCampos();
            txtNroDoc.Focus();
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            limpiarCampos();
            this.Close();
        }
    }
}
